home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / utility / cbhd502 / src / c / include / scsidrv / scsidefs.h < prev    next >
C/C++ Source or Header  |  1997-01-21  |  9KB  |  243 lines

  1. /****************************************************************************
  2.  *
  3.  * Typen für SCSI-Calls in C
  4.  *
  5.  * $Source: u:\k\usr\src\scsi\cbhd\rcs\scsidefs.h,v $
  6.  *
  7.  * $Revision: 1.8 $
  8.  *
  9.  * $Author: Steffen_Engel $
  10.  *
  11.  * $Date: 1996/02/14 11:33:52 $
  12.  *
  13.  * $State: Exp $
  14.  *
  15.  *****************************************************************************
  16.  * History:
  17.  *
  18.  * $Log: scsidefs.h,v $
  19.  * Revision 1.8  1996/02/14  11:33:52  Steffen_Engel
  20.  * keine globalen Kommandostrukturen mehr
  21.  *
  22.  * Revision 1.7  1996/01/25  17:53:16  Steffen_Engel
  23.  * Tippfehler bei PARITYERROR korrigiert
  24.  *
  25.  * Revision 1.6  1995/11/28  19:14:14  S_Engel
  26.  * *** empty log message ***
  27.  *
  28.  * Revision 1.5  1995/11/14  22:15:58  S_Engel
  29.  * Kleine Korrekturen
  30.  * aktualisiert auf aktuellen Stand
  31.  *
  32.  * Revision 1.4  1995/10/22  15:43:34  S_Engel
  33.  * Kommentare leicht überarbeitet
  34.  *
  35.  * Revision 1.3  1995/10/13  22:30:54  S_Engel
  36.  * GetMsg in Struktur eingefügt
  37.  *
  38.  * Revision 1.2  1995/10/11  10:21:34  S_Engel
  39.  * Handle als LONG, Disconnect auf Bit4 verlegt
  40.  *
  41.  * Revision 1.1  1995/10/03  12:49:42  S_Engel
  42.  * Initial revision
  43.  *
  44.  *
  45.  ****************************************************************************/
  46.  
  47.  
  48. #ifndef __SCSIDEFS_H
  49. #define __SCSIDEFS_H
  50.  
  51. #include <portab.h>
  52. #include <atarierr.h>
  53.  
  54. /*****************************************************************************
  55.  * Konstanten
  56.  *****************************************************************************/
  57. #define SCSIRevision 0x0100                     /* Version 1.00 */
  58.  
  59. #define MAXBUSNO        31       /* maximal mögliche Busnummer */
  60.  
  61.  
  62. /* SCSI-Fehlermeldungen für In und Out */
  63.  
  64. #define NOSCSIERROR      0L /* Kein Fehler                                   */
  65. #define SELECTERROR     -1L /* Fehler beim Selektieren                       */
  66. #define STATUSERROR     -2L /* Default-Fehler                                */
  67. #define PHASEERROR      -3L /* ungültige Phase                               */
  68. #define BSYERROR        -4L /* BSY verloren                                  */
  69. #define BUSERROR        -5L /* Busfehler bei DMA-Übertragung                 */
  70. #define TRANSERROR      -6L /* Fehler beim DMA-Transfer (nichts übertragen)  */
  71. #define FREEERROR       -7L /* Bus wird nicht mehr freigegeben               */
  72. #define TIMEOUTERROR    -8L /* Timeout                                       */
  73. #define DATATOOLONG     -9L /* Daten für ACSI-Softtransfer zu lang           */
  74. #define LINKERROR      -10L /* Fehler beim Senden des Linked-Command (ACSI)  */
  75. #define TIMEOUTARBIT   -11L /* Timeout bei der Arbitrierung                  */
  76. #define PENDINGERROR   -12L /* auf diesem handle ist ein Fehler vermerkt     */
  77. #define PARITYERROR    -13L /* Transfer verursachte Parity-Fehler            */
  78.  
  79.  
  80. /*****************************************************************************
  81.  * Typen
  82.  *****************************************************************************/
  83.  
  84. /*
  85.   in portab.h zu definieren:
  86.  
  87.   BYTE      : 8 Bit signed (char)
  88.   UBYTE     : 8 Bit unsigned (unsigned char)
  89.   UWORD     : 16 Bit ganzzahlig positiv (unsigned word)
  90.   ULONG     : 32 Bit ganzzahlig positiv (unsigned long)
  91.   WORD      : 16 Bit ganzzahlig (word)
  92.   LONG      : 32 Bit ganzzahlig (long)
  93.   BOOLEAN   : WORD
  94.               TRUE  : 1
  95.               FALSE : 0
  96.   DLONG     : 64 Bit unsigned
  97. */
  98.  
  99. typedef struct
  100. {
  101.   ULONG hi;
  102.   ULONG lo;
  103. } DLONG;
  104.  
  105. typedef struct{
  106.   ULONG BusIds;
  107.   BYTE  resrvd[28];
  108. }tPrivate;
  109.  
  110. typedef WORD *tHandle;                /* Zeiger auf BusFeatures */
  111.  
  112. typedef struct
  113. {
  114.   tHandle Handle;                     /* Handle für Bus und Gerät             */
  115.   BYTE  *Cmd;                         /* Zeiger auf CmdBlock                  */
  116.   UWORD CmdLen;                       /* Länge des Cmd-Block (für ACSI nötig) */
  117.   void  *Buffer;                      /* Datenpuffer                          */
  118.   ULONG TransferLen;                  /* Übertragungslänge                    */
  119.   BYTE  *SenseBuffer;                 /* Puffer für ReqSense (18 Bytes)       */
  120.   ULONG Timeout;                      /* Timeout in 1/200 sec                 */
  121.   UWORD Flags;                        /* Bitvektor für Ablaufwünsche          */
  122.     #define Disconnect 0x10           /* versuche disconnect                  */
  123.  
  124. }tSCSICmd;
  125. typedef tSCSICmd *tpSCSICmd;
  126.  
  127.  
  128. typedef struct
  129. {
  130.   tPrivate Private;
  131.    /* für den Treiber */
  132.   char  BusName[20];
  133.    /* zB 'SCSI', 'ACSI', 'PAK-SCSI' */
  134.   UWORD BusNo;
  135.    /* Nummer, unter der der Bus anzusprechen ist */
  136.   UWORD Features;
  137.       #define cArbit     0x01    /* auf dem Bus wird arbitriert                          */
  138.       #define cAllCmds   0x02    /* hier können ale SCSI-Cmds abgesetzt werden           */
  139.       #define cTargCtrl  0x04    /* Das Target steuert den Ablauf (so soll's sein!)      */
  140.       #define cTarget    0x08    /* auf diesem Bus kann man sich als Target installieren */
  141.       #define cCanDisconnect 0x10 /* Disconnect ist möglich                             */
  142.       #define cScatterGather 0x20 /* scatter gather bei virtuellem RAM möglich */
  143.   /* bis zu 16 Features, die der Bus kann, zB Arbit,
  144.    * Full-SCSI (alle SCSI-Cmds im Gegensatz zu ACSI)
  145.    * Target oder Initiator gesteuert
  146.    * Ein SCSI-Handle ist auch ein Zeiger auf eine Kopie dieser Information!
  147.    */
  148.   ULONG MaxLen;
  149.   /* maximale Transferlänge auf diesem Bus (in Bytes)
  150.    * entspricht zB bei ACSI der Größe des FRB
  151.    */
  152. }tBusInfo;
  153.  
  154. typedef struct
  155. {
  156.   BYTE Private[32];
  157.   DLONG SCSIId;
  158. }tDevInfo;
  159.  
  160.  
  161. typedef struct ttargethandler
  162. {
  163.   struct  ttargethandler *next;
  164.   BOOLEAN cdecl (*TSel)         (WORD     bus,
  165.                                  UWORD    CSB,
  166.                                  UWORD    CSD);
  167.   BOOLEAN cdecl (*TCmd)         (WORD     bus,
  168.                                  BYTE    *Cmd);
  169.   UWORD   cdecl (*TCmdLen)      (WORD     bus,
  170.                                  UWORD    Cmd);
  171.   void    cdecl (*TReset)       (UWORD    bus);
  172.   void    cdecl (*TEOP)         (UWORD    bus);
  173.   void    cdecl (*TPErr)        (UWORD    bus);
  174.   void    cdecl (*TPMism)       (UWORD    bus);
  175.   void    cdecl (*TBLoss)       (UWORD    bus);
  176.   void    cdecl (*TUnknownInt)  (UWORD    bus);
  177. }tTargetHandler;
  178.  
  179. typedef tTargetHandler *tpTargetHandler;
  180.  
  181. typedef BYTE tReqData[18];
  182.  
  183. typedef struct
  184. {
  185.   UWORD Version;                /* Revision in BCD: $0100 = 1.00 */
  186.   
  187.   /* Routinen als Initiator */
  188.   LONG  cdecl (*In)           (tpSCSICmd  Parms);
  189.   LONG  cdecl (*Out)          (tpSCSICmd  Parms);
  190.   
  191.   LONG  cdecl (*InquireSCSI)  (WORD       what,
  192.                                tBusInfo  *Info);
  193.     #define cInqFirst  0
  194.     #define cInqNext   1
  195.   LONG  cdecl (*InquireBus)   (WORD       what,
  196.                                WORD       BusNo,
  197.                                tDevInfo  *Dev);
  198.  
  199.   LONG  cdecl (*CheckDev)     (WORD       BusNo,
  200.                                const DLONG *SCSIId,
  201.                                char      *Name,
  202.                                UWORD     *Features);
  203.   LONG  cdecl (*RescanBus)    (WORD       BusNo);
  204.  
  205.  
  206.   LONG  cdecl (*Open)         (WORD       BusNo,
  207.                                const DLONG *SCSIId,
  208.                                ULONG     *MaxLen);
  209.   LONG  cdecl (*Close)        (tHandle    handle);
  210.   LONG  cdecl (*Error)        (tHandle    handle,
  211.                                WORD       rwflag,
  212.                                WORD       ErrNo);
  213.         #define cErrRead   0
  214.         #define cErrWrite  1
  215.           #define cErrMediach  0
  216.           #define cErrReset    1
  217.   
  218.   /* Routinen als Target (optional) */
  219.   LONG  cdecl (*Install)    (WORD       bus,
  220.                              tpTargetHandler Handler);
  221.   LONG  cdecl (*Deinstall)  (WORD       bus,
  222.                              tpTargetHandler Handler);
  223.   LONG  cdecl (*GetCmd)     (WORD       bus,
  224.                              BYTE      *Cmd);
  225.   LONG  cdecl (*SendData)   (WORD       bus,
  226.                              BYTE      *Buffer,
  227.                              ULONG      Len);
  228.   LONG  cdecl (*GetData)    (WORD       bus,
  229.                              void      *Buffer,
  230.                              ULONG      Len);
  231.   LONG  cdecl (*SendStatus) (WORD       bus,
  232.                              UWORD      Status);
  233.   LONG  cdecl (*SendMsg)    (WORD       bus,
  234.                              UWORD      Msg);
  235.   LONG  cdecl (*GetMsg)     (WORD       bus,
  236.                              UWORD     *Msg);
  237.   
  238.   /* globale Variablen (für Targetroutinen) */
  239.   tReqData      *ReqData;
  240. }tScsiCall;
  241. typedef tScsiCall *tpScsiCall;
  242.  
  243. #endif